import { HOME_URL } from '@/common/constants/global'
import { useRouteMenu } from '@/hooks/useRouteMenu'
import { menuFindAll } from '@/api/system/menu'
import { sleep } from '@/utils'

/**
 * 动态路由（扁平化）
 * @description 🪧 路由参数配置简介
 * @param {String} path 路由菜单访问路径（唯一）
 * @param {String} name 路由 name（唯一标识）
 * @param {String} component 视图文件路径
 * @param {String} redirect 路由重定向地址
 * @param {String} parent 所属父级 name（根节点为空）
 * @param {Array<string>} permissions 所需权限
 * @param {Number} sort 菜单排序
 * @param {Object} meta 路由菜单元信息
 * @property {String} meta.icon 菜单和面包屑对应的图标
 * @property {String} meta.title 路由标题（用作 document.title 和菜单的名称）
 * @property {String} meta.activeMenu 当前路由为详情页时，需要高亮的菜单（path 路径）
 * @property {String} meta.link 路由外链时填写的访问地址
 * @property {Boolean} meta.isHide 是否隐藏菜单（将不会构建该路由）
 * @property {Boolean} meta.isSub 是否是子菜单（通常为详情页面，不在菜单列表中显示，但是会正常构建路由）
 * @property {Boolean} meta.isFull 菜单是否全屏
 * @property {Boolean} meta.isAffix 菜单是否固定在标签页中（首页通常是固定项）
 * @property {Boolean} meta.isKeepAlive 当前路由是否缓存
 * @property {Boolean} meta.isOpen 是否为开放页面（为 true 表示无需 token 或身份验证，可以直接访问）
 * @property {Boolean} meta.isLocal 本地化路由必须配置为 true
 */

// 动态路由的本地化路由，请勿与静态路由的概念混淆
export const localRoutes = [
  {
    path: HOME_URL,
    name: 'home',
    component: '/home/index',
    redirect: '',
    parent: '',
    permissions: [],
    sort: 1,
    meta: {
      icon: 'uni-icons-home-filled',
      title: '首页',
      activeMenu: '',
      link: '',
      isHide: false,
      isFull: false,
      isAffix: true,
      isKeepAlive: true,
      isSub: false,
      isOpen: false,
      isLocal: true
    }
  },
  {
    path: '/test',
    name: 'test',
    component: '/test/index',
    redirect: '',
    parent: '',
    permissions: [],
    sort: 200,
    meta: {
      icon: 'admin-icons-fl-xitong',
      title: '测试管理',
      activeMenu: '',
      link: '',
      isHide: false,
      isFull: false,
      isAffix: false,
      isKeepAlive: true,
      isSub: false,
      isOpen: true,
      isLocal: true
    }
  },
  {
    path: '/icons',
    name: 'icons',
    component: '/icons/index',
    redirect: '',
    parent: '',
    permissions: [],
    sort: 900,
    meta: {
      icon: 'admin-icons-icon',
      title: '图标',
      activeMenu: '',
      link: '',
      isHide: false,
      isFull: false,
      isAffix: false,
      isKeepAlive: true,
      isSub: false,
      isOpen: false,
      isLocal: true
    }
  }
]

export const dynamicRouter = async () => {
  // 动态路由的服务端路由
  let apiRoutes = []
  try {
    let routeRes = await menuFindAll({ pageSize: -1, status: 1 })
    apiRoutes = routeRes.data
  } catch (error) {
    // 捕获异常，当接口报错时，不做处理
    // console.error(error);
  }

  // 动态路由合并
  const routeList = [...localRoutes, ...apiRoutes]

  // 注册动态路由
  const dynamicRoutes = useRouteMenu().registerRoute(routeList)

  return dynamicRoutes
}
